#!/bin/sh

MODNAME=openvpn_custom_config

[ "$1" != "restart" ] && /usr/bin/shlock /var/lock/$MODNAME.sh

[ ! -f /opt/$MODNAME/etc/settings ] && cp /opt/$MODNAME/etc/defaults /opt/$MODNAME/etc/settings
. /opt/$MODNAME/etc/settings

VARDIR=/var/$MODNAME
[ ! -d $VARDIR ] && mkdir -p $VARDIR

if [ "$1" = "start" ] || [ "$1" = "stop" ] || [ "$1" = "status" ]; then
  [ -n "$2" ] && TUNNELS="$2" || TUNNELS="1 2 3 4"
fi

case "$1" in
  start)
    RETVAL=0;
    for IDX in $TUNNELS; do
      echo -n "Starting module $MODNAME (tunnel $IDX): "
      eval ENABLED='$'MOD_OVPN_CC_TUNNEL$IDX'_ENABLED'
      eval CFG='$'MOD_OVPN_CC_TUNNEL$IDX'_CFG'
      /usr/bin/decode $CFG > $VARDIR/tunnel$IDX.ovpn
      if [ "$ENABLED" != "0" ] && [ ! -f $VARDIR/tunnel$IDX.pid ]; then
        /usr/sbin/openvpnd --config $VARDIR/tunnel$IDX.ovpn --syslog --writepid $VARDIR/tunnel$IDX.pid --status $VARDIR/status$IDX &
        for WAIT in 0 1 2; do
          [ -f $VARDIR/tunnel$IDX.pid ] && break
          sleep 1
        done
        if [ -f $VARDIR/tunnel$IDX.pid ];then echo "done"; else echo "failed"; RETVAL=1; fi
      else
        echo "skipped"
      fi
    done
    exit $RETVAL
    ;;
  stop)
    RETVAL=0;
    for IDX in $TUNNELS; do
      echo -n "Stopping module $MODNAME (tunnel $IDX): "
      if [ -f $VARDIR/tunnel$IDX.pid ]; then
        PID=`cat $VARDIR/tunnel$IDX.pid`
        kill $PID 2> /dev/null
        RETVAL=$?
        for WAIT in 0 1 2 3 4 5 6 7 8 9; do
          kill -0 $PID 2> /dev/null
          [ $? != 0 ] && break
          sleep 1
        done
        kill -9 $PID 2> /dev/null
        if [ $RETVAL = 0 ];then echo "done"; else echo "failed";fi
        rm $VARDIR/tunnel$IDX.pid
        rm $VARDIR/status$IDX
      else
        echo "skipped";
      fi
    done
    exit $RETVAL
    ;;
  restart)
    $0 stop $2
    $0 start $2
    ;;
  status)
    for IDX in $TUNNELS; do
      if [ -f $VARDIR/status$IDX ]; then
        echo "Tunnel $IDX : "
        echo ""
        ifconfig "tun$((IDX+10))"
        cat $VARDIR/status$IDX
      else
        echo "Tunnel $IDX : Disabled"
      fi
    done
    exit 0
    ;;
  syslog)
    cat /var/log/messages | /bin/grep "openvpn"
    exit 0
    ;;
  defaults)
    cd /opt/$MODNAME/etc && cp defaults settings
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status|defaults}"
    exit 1
esac
